#include "LiquidCrystal.h" // Librería para el LCD
#include "rtc.h"           // I2C para el reloj
#include "dht.h"           // Sensor de temperatura y humedad DHT21
#include "util.h"          // General purpose functions
#include "Wire.h"                // I2C para el reloj
#include "menu.h"                // I2C para el reloj
#include "acciones.h"                // I2C para el reloj



#define MAXINT (32*1024-1)

#define PIN_ANALOG_BUTTONS 15
#define PIN_PRUEBA 1



//typedef void (Menu::*tMenuMethod)();

typedef struct {
	int min, max;
	char key;
	//tMenuMethod menuMethod;
} AnalogButtonsLevel;

AnalogButtonsLevel analogButtonsLevel[] = {
		{ 265, 370, KEY_UPWARD},
		{ 422, 540, KEY_DOWNWARD},
		{ 560, 671, KEY_ACTION},
		{ 676, 773, KEY_FORWARD},
		{ 781, 863, KEY_BACKWARD},
		{ 867, 929, KEY_ACTION},
		{ 930, MAXINT, 0} // End of List
};

char botonPulsado = 0;
int vButtons = 0;

// Leer botones del volante Referencia desde +12 de Vin
// Para +12->10k; para +5->220omn
void readButton( )
{
	//Serial.println( "readButton: enter");
	//Serial.print( "botonPulsado=");
	//Serial.println( botonPulsado, DEC);
	botonPulsado = 0;

	vButtons = analogRead( PIN_ANALOG_BUTTONS);
	//Serial.print("Botones(0-1023)=");
	//Serial.println(vButtons, DEC);
	if( vButtons >= analogButtonsLevel[0].min) {
		//Serial.print("Botones(0-1023)=");
		//Serial.println(vButtons);

		int i = 0;
		while( vButtons > analogButtonsLevel[i].max) {
			i++;
			//botonPulsado = analogButtonsLevel[i].ch;
			//Serial.print( "idx=");
			//Serial.println( i, DEC);
		}
		if( analogButtonsLevel[i].key > 0) {
			menu.processKey( analogButtonsLevel[i].key);
		}

//		Serial.print( "botonPulsado=");
//		Serial.println( botonPulsado);
	}
}



void setup()
{
	pinMode( PIN_ANALOG_BUTTONS, INPUT);

	Serial.begin(9600);                    // consola serie del pc

	menu.reset();
	menu.print();
}




void loop()
{
	//Serial.println( "====== LOOP =============================================");
	readButton();
//	if( botonPulsado != 0) {
		//Serial.print( "botonPulsado=");  
		//Serial.println( botonPulsado, DEC);
//		botonPulsado = 0;
//	}

	actualizarEstadoCalefaccion();
	menu.updateEventually();
	delay( 100);
}
